class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        candidates.sort()
        result=[]
        visited=[0]*len(candidates)
        def dfs(prev,route,total,offset,prefix):
            if total==target:
                result.append(route[:])
            if total>target:
                return 
            for index,i in enumerate(candidates):
                if i>=prev and index>offset and visited[index]==0 and i not in prefix:
                    route.append(i)
                    visited[index]=1
                    dfs(i,route,total+i,index,{})
                    prefix[i]=1
                    route.pop()
                    visited[index]=0
        dfs(candidates[0],[],0,-1,{})
        return result

'''
执行用时：
136 ms
, 在所有 Python3 提交中击败了
11.89%
的用户
内存消耗：
15 MB
, 在所有 Python3 提交中击败了
9.92%
的用户
'''